# Vuex Class Modules

O Vuex Class Modules é um pacote que traz type-safe em conjunto com o Typescript sendo simples para o Vuex.

Para adicionar em nosso projeto, utilize o comando yarn add vuex-class-modules

Com ele, conseguimos utilizar os módulos do Vuex de uma forma diferente:

modulo-usuario.ts

import { VuexModule, Module, Mutation, Action } from "vuex-class-modules";

@Module
class ModuloUsuario extends VuexModule {
  nome = "Joãozinho123";

  get nomeInteiro() {
    return this.nome += "456789";
  }

  @Mutation
  setNome(nome: string) {
    this.nome = nome;
  }

  @Action
  async carregarUsuarioNome() {
    const { nome } = await fetchUsuario();
    this.setNome(nome);
  }
}

//Registrar o módulo
import store from "@/store";
export const moduloUsuario = new ModuloUsuario({ store, name: "usuario" });

MeuComponente.vue

import Vue from "vue";
import { ModuloUsuario } from "path/to/modulo-usuario.ts";

export class MeuComponente extends Vue {
  get nome() {
    return ModuloUsuario.nome; // -> é igual a store.state.usuario.nome
  }
  get nomeInteiro() {
    return ModuloUsuario.fullName; // -> é igual a store.getters["usuario/nomeInteiro]
  }

  mounted() {
    ModuloUsuario.carregarUsuarioNome(); // -> é igual a store.dispatch("usuario/carregarUsuarioNome")
  }
}
  • Chamamos o this.setNome(nome) na Action pois o fluxo do Vuex necessita de commitar para a mutation, por isso não podemos fazer this.nome = nome dentro de uma action.

  • Precisamos dos getters em nossos componentes pois dessa forma em caso aconteça uma mutação em nosso store em quanto um item do template está sendo exibido o seu conteúdo não fica estático e acaba sendo aplicado a mundaça no template.

Próxima Seção